/* Yet Another Experimental Software Renderer
 *
 * Copyright (c) 2010 Pawel "Hery" Dziepak
 */

#ifndef GEOMETRY_SHADER_H_
#define GEOMETRY_SHADER_H_

#include "primitives.h"

#include <vector>

namespace yaesr {
	class geometry_shader {
	public:
		virtual void execute(point, std::vector<point>&, std::vector<line>&, std::vector<triangle>&) = 0;
		virtual void execute(line, std::vector<point>&, std::vector<line>&, std::vector<triangle>&) = 0;
		virtual void execute(triangle, std::vector<point>&, std::vector<line>&, std::vector<triangle>&) = 0;
	};

	class geometry_shader_impl : public geometry_shader {
	public:
		void execute(point, std::vector<point>&, std::vector<line>&, std::vector<triangle>&);
		void execute(line, std::vector<point>&, std::vector<line>&, std::vector<triangle>&);
		void execute(triangle, std::vector<point>&, std::vector<line>&, std::vector<triangle>&);
	};
}

#endif